﻿/*************************************************************************
* 计算机名：AA-FA-05
* CLR 版本：4.0.30319.42000
* 命名空间: Unity
* 类    名：ScreenUnitConvert
* 当 前 域：HYRC
* 创 建 人：dailuyu
* 创建时间：2021/6/17 9:36:39
* 描    述：
*  V0.01 2021 初版
*
*  Copyright (c) 2021 aatsr Corporation. All rights reserved.
*  ┌──────────────────────────────────┐
*  │　此技术信息为本公司机密信息，未经本公司书面同意禁止向第三方披露．　│
*  └──────────────────────────────────┘
***************************************************************************/

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Data;

namespace Unity
{
    /// <summary>
    /// 屏幕宽度转换
    /// 使用方式：
    ///   资源里引用---> <convert:ScreenUnitConvert x:Key="suc" />
    ///    <Canvas Height="{Binding Converter={StaticResource suc},ConverterParameter='h40'}"  Width="{Binding Converter={StaticResource suc},ConverterParameter='w40'}"/>
    /// </summary>
    public class ScreenUnitConvert : IValueConverter
    {
        static double w = SystemParameters.PrimaryScreenWidth;//屏幕宽度
        static double h = SystemParameters.PrimaryScreenHeight;//屏幕高度

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var p = parameter + string.Empty;
            if (p.Length < 2) return null;

            var v = Double.Parse(p.Substring(1));
            if (p.StartsWith("w"))
                return GetWPx(v);
            else if (p.StartsWith("h"))
                return GetHPx(v);

            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }



        /// <summary>
        /// 根据分辨率获取缩放后的单位(宽度以1920为基准)
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public static double GetWPx(double p)
        {
            return p * (w / 1920);
        }

        /// <summary>
        /// 根据分辨率获取缩放后的单位(高度以1080为基准)
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public static double GetHPx(double p)
        {
            return p * (h / 1080);
        }
    }
}
